const path = require('path')
const webpack = require('webpack')
const createThemeColorReplacerPlugin = require('./config/plugin.config')

const FileManagerPlugin = require('filemanager-webpack-plugin') // 打包文件为zip

function resolve(dir) {
  return path.join(__dirname, dir)
}

const assetsCDN = {
  // main.js里引入了对应的less以使 webpack-theme-color-replacer工作
  // https://cdn.jsdelivr.net/npm/ant-design-vue@1.3.9/dist/antd.min.css
  css: [],
  js: [
    //从网络上引入的js改成本地引入
    '/js/vue.min.js',
    '/js/axios.min.js',
    '/js/moment.js',
    '/js/zh-cn.js',
    '/js/g2.min.js',
    '/js/data-set.min.js',
    '/js/antd-with-locales.js',
    '/js/vue-router.min.js',
    '/js/vuex.min.js',
    // 'https://cdn.jsdelivr.net/npm/vue@2.6.10/dist/vue.min.js',
    // 'https://cdn.jsdelivr.net/npm/axios@0.19.0/dist/axios.min.js',
    // 'https://cdn.jsdelivr.net/npm/vue-router@3.1.2/dist/vue-router.min.js',
    // 'https://cdn.jsdelivr.net/npm/vuex@3.1.1/dist/vuex.min.js',
    // 'https://cdn.jsdelivr.net/npm/moment@2.24.0/moment.min.js',
    // 'https://cdn.jsdelivr.net/npm/moment@2.24.0/locale/zh-cn.js',
    // 'https://cdn.jsdelivr.net/npm/@antv/g2@3.5.7/dist/g2.min.js',
    // 'https://cdn.jsdelivr.net/npm/@antv/data-set@0.10.2/dist/data-set.min.js',
    // 'https://cdn.jsdelivr.net/npm/ant-design-vue@1.5.0-rc.4/dist/antd-with-locales.js'
  ],
}
// webpack build externals
const prodExternals = {
  // key表示包名(import foo from 'xx' 里的xx)
  // value表示window下的全局变量名(库暴露出来的namespace,可查lib对应的webpack配置里的library字段)
  vue: 'Vue',
  axios: 'axios',
  'vue-router': 'VueRouter',
  vuex: 'Vuex',
  moment: 'moment',
  '@antv/g2': 'G2',
  '@antv/data-set': 'DataSet',
  'ant-design-vue': 'antd',
}

function getPlugins() {
  let plugins = [
    new webpack.IgnorePlugin(/^\.\/locale$/, /moment$/),
      new webpack.IgnorePlugin(/moment\//),
  ]
  if (process.env.NODE_ENV !== 'development') {
    // plugins.push(
    //   new FileManagerPlugin({
    //     // 生成dist.zip
    //     onEnd: [{ archive: [{ source: './dist', destination: './dist.zip' }] }],
    //   })
    // )
  }
  return plugins
}

// vue.config.js
const vueConfig = {
  configureWebpack: {
    name: '管理平台',
    externals: prodExternals,
    plugins: getPlugins(),
  },

  chainWebpack: (config) => {
    config.resolve.alias.set('@$', resolve('src'))

    const svgRule = config.module.rule('svg')
    svgRule.uses.clear()
    svgRule
      .oneOf('inline')
      .resourceQuery(/inline/)
      .use('vue-svg-icon-loader')
      .loader('vue-svg-icon-loader')
      .end()
      .end()
      .oneOf('external')
      .use('file-loader')
      .loader('file-loader')
      .options({
        name: 'assets/[name].[hash:8].[ext]',
      })
    // assets require on cdn
    config.plugin('html').tap((args) => {
      args[0].cdn = assetsCDN
      return args
    })
  },

  css: {
    loaderOptions: {
      less: {
        modifyVars: {
          'primary-color': '#364DD1',
          'link-color': '#364DD1',
          'border-radius-base': '2px',
        },
        javascriptEnabled: true,
      },
    },
  },

  devServer: {
    // development server port 8000
    port: 8000,
    proxy: {
      '/api': {
        target: process.env.VUE_APP_BASE_API,
        pathRewrite: { '^/api': '' },
        ws: false,
        changeOrigin: true,
      },
    },
  },
  // disable source map in production
  productionSourceMap: false,
  lintOnSave: false,
  // babel-loader no-ignore node_modules/*
  transpileDependencies: [],
}

// 如果你不想在生产环境开启换肤功能，请打开下面注释
// if (process.env.VUE_APP_PREVIEW === 'true') {
// add `ThemeColorReplacer` plugin to webpack plugins
vueConfig.configureWebpack.plugins.push(createThemeColorReplacerPlugin())
// }

module.exports = vueConfig
